#ifndef STEGANOGRAPHY_H_
#define STEGANOGRAPHY_H_

#include "Image.h"
#include "TransTable.h"

/*
 * =====================================================================================
 *        Class:  MessageTooBigException
 *  Description:  Exceção para messagem muito grande
 * =====================================================================================
 */
class MessageTooBigException: public exception
{

public:

    MessageTooBigException(uint storage, uint size) throw()
    {
        msg = "Error: Could not storage message with " + to_string(size) + " bytes " +
              "image with capacity of " + to_string(storage) + " bytes";
    }

    virtual ~MessageTooBigException() throw() { }

    virtual const char* what() const throw () { return msg.c_str(); }

    string msg;
};

/*
 * =====================================================================================
 *        Class:  Steganography
 *  Description:  Classe para realizar funções de esteganografia
 * =====================================================================================
 */
class Steganography
{

public:

    /*-----------------------------------------------------------------------------
     *  Esconde uma mensagem na imagem passada
     *-----------------------------------------------------------------------------*/
    static void hide(Image& image, istream &msg, Key &key);

    /*-----------------------------------------------------------------------------
     *  Extrai uma mensagem da imagem passada
     *-----------------------------------------------------------------------------*/
    static void extract(Image& image, ostream &msg, Key &key);

};

#endif /* STEGANOGRAPHY_H_ */
